package n3009;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	
	static int max=20;
	
	/*static class Node{
		int [][] maze;
		int step;
		int x,y;
		public Node(int [][] maze,int step,int x,int y) {
			this.maze=maze;
			this.step=step;
			this.x=x;
			this.y=y;
		}
	}
	
	static Node[] nodeArray=new Node[max*max*40];
	
	static int bfs(int sx,int sy,int[][] first,int lenx,int leny)
	{
		Node node=new Node(first,0,sx,sy);
		nodeArray[0]=node;
		int i=0,count=1;
		while(i<count)
		{
			Node cur=nodeArray[i++];
			if(cur.step==10)break;
			cur.maze[cur.x][cur.y]=0;
			int dir[][]={{-1,0},{0,1},{1,0},{0,-1}};
			for(int k=0;k<dir.length;k++)
			{
				int tx=cur.x,ty=cur.y;
				tx=tx+dir[k][0];
				ty=ty+dir[k][1];
				if(tx>=0&&tx<lenx&&ty>=0&&ty<leny&&(cur.maze[tx][ty]==0||cur.maze[tx][ty]==3))
				{
					while(tx>=0&&tx<lenx&&ty>=0&&ty<leny)
					{
						if(cur.maze[tx][ty]==1)
						{
							int tmp[][]=new int[lenx][leny];
							for(int p=0;p<lenx;p++)
								for(int q=0;q<leny;q++)
								{
									tmp[p][q]=cur.maze[p][q];
								}
							tmp[tx][ty]=0;
							Node next=new Node(tmp,cur.step+1,tx-dir[k][0],ty-dir[k][1]);
							nodeArray[count++]=next;
							break;
						}else if(cur.maze[tx][ty]==3)
						{
							return cur.step+1;
						}else{
							tx=tx+dir[k][0];
							ty=ty+dir[k][1];
						}
					}
				}
			}
		}
		return -1;
	}
	*/
	static int[][] maze=new int[max][max];
	
	static int min=-1;
	
	static int maxx,maxy;
	
	static int[][] dir={{-1,0},{0,1},{1,0},{0,-1}};
	static void dfs(int sx,int sy,int count)
	{
		if(count==11)return;
		for(int i=0;i<dir.length;i++)
		{
			int tx=sx+dir[i][0],ty=sy+dir[i][1];
			if(tx>=0&&tx<maxx&&ty>=0&&ty<maxy&&maze[tx][ty]!=1)
			{
				while(tx>=0&&tx<maxx&&ty>=0&&ty<maxy)
				{
					if(maze[tx][ty]==3){
						if(min>count&&min!=-1)min=count;
						else if(min==-1)min=count;
						return;
					}else if(maze[tx][ty]==1)
					{
						maze[tx][ty]=0;
						dfs(tx-dir[i][0],ty-dir[i][1],count+1);
						maze[tx][ty]=1;
						break;
					}
					tx=tx+dir[i][0];
					ty=ty+dir[i][1];
				}
			}
		}
			
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{

		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		String line=null;
		while((line=bf.readLine())!=null)
		{
			if(line.equals("0 0"))break;
			StringTokenizer st=new StringTokenizer(line);
			int leny=Integer.parseInt(st.nextToken());
			int lenx=Integer.parseInt(st.nextToken());
			//int first[][]=new int[lenx][leny];
			int sx=-1,sy=-1;
			for(int i=0;i<lenx;i++)
			{
				line=bf.readLine();
				StringTokenizer st2=new StringTokenizer(line);
				for(int j=0;j<leny;j++)
				{
					//first[i][j]=Integer.parseInt(st2.nextToken());
					maze[i][j]=Integer.parseInt(st2.nextToken());
					if(sx==-1&&maze[i][j]==2){
						sx=i;
						sy=j;
					}
				}
			}
			//System.out.println(bfs(sx,sy,first,lenx,leny));
			min=-1;
			maxx=lenx;
			maxy=leny;
			dfs(sx, sy, 1);
			System.out.println(min);
		}
		
	}

}
